[ฟีเจอร์ใหม่]เปิดตัว Amazon EventBridge Scheduler ที่สามารถ schedule โดยระบุ Timezone ได้
สวัสดีครับ LIGHT จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้อยากจะมาแนะนำให้ทุกคนได้รู้จักกับฟีเจอร์ใหม่ของ EventBridge ที่มีชื่อว่า Amazon EventBridge Scheduler กันครับ
ข้อมูลโดยรวม EventBridge Scheduler
- สามารถระบุ Timezone เพื่อเรียกใช้งาน task เป็นประจำหรือครั้งเดียวได้
-
ไม่ใช่แค่ทำงานตามเวลาที่กำหนดไว้แต่ยังสามารถทำงานได้ในช่วงกรอบเวลาที่กำหนดไว้ได้อีกด้วย
(อย่างเช่น Image ของ maintenance windows ใน RDS เป็นต้น) -
รองรับการเป็น Target สำหรับบริการ AWS กว่า 270 รายการ รวมถึงยังสามารถเรียกใช้คำสั่งที่ rule ของ EventBridge ไม่สามารถเรียกใช้โดยตรงได้
-
เป็นคนละบริการกับ " EventBridge Rules"
ความแตกต่างจาก EventBridge rules
ดังที่ได้กล่าวไว้ทางด้านบนว่าบริการนี้เป็นคนละบริการกับ EventBridge rules ซึ่งมีความแตกต่างในการทำงานหลายส่วน โดยจะใช้งานต่างกันตามลักษณะการใช้งาน และในบล็อกนี้ AWS Blog ทาง AWS ได้มีการสรุปความแตกต่างของฟังก์ชันเอาไว้เลยลองรวบรวมเนื้อหามาอธิบายให้ทุกท่านกันครับ
Amazon EventBridge Scheduler | Amazon EventBridge rules | |
---|---|---|
Quota ของจำนวน Schedule | 1 ล้านต่อบัญชี | 1 Account ต่อ 1 Region จำกัดที่ 300 rules |
Throughput การเรียกใช้ Event | สามารถรองรับการ throughput ที่ 1,000 TPS | จาก Quota ของจำนวน Schedule ทางด้านบน สามารถสร้าง schedule ได้แค่ 300 ต่อนาที จากโควต้า schedule ข้างต้น throughput จึงได้สูงสุดที่ 5 TPS |
Target | ทำงานกับ API กว่า 6,000 รายการ และ 270 บริการที่ใช้งาน AWS SDK Target | Target มากกว่า 20 รายการที่รองรับใน EventBridge |
การแสดงเวลา และ Timezone | Timezone ทั้งหมด at(), cron(), rate() และ DST (summer time) | Timezone cron(), rate() จะเป็น UTC เท่านั้นและไม่รองรับ DST |
schedule แบบ 1 ครั้ง | Yes | No※1 |
time window schedule | Yes | No |
รองรับ event buses | ไม่ต้องใช้ event buses | Default buses เท่านั้น |
การใช้โควต้าของ Rules | ไม่ใช้ Quota, และมี soft limit ที่ 1 ล้าน schedule | ใช้ Quota, โดยจะใช้ 2000 Rules ต่อ buses※2 |
※1 สามารถสร้าง Rules ที่จะทำงานได้ 1 ครั้งด้วยรูปแบบ cron
※2 ใน Amazon EventBridge UserGuide มีระบุไว้ว่ามี 300 Rules ต่อ buses จึงไม่แน่ใจว่า 2,000 ที่ระบุไว้นี้หมายถึงโควต้าใด
เรื่องที่น่าสนใจของ EventBridge Scheduler
จุดที่น่าสนใจ(สำหรับผู้เขียน)คือการรองรับ โควต้า และ Timezone
คงมีหลายท่านที่จำนวน Rules ของ EventBridge ที่มีให้ 300 Rules ถึงขีดจำกัดเร็วกว่าที่คาดไว้ ด้วย EventBridge Scheduler คุณสามารถสร้าง Schedule ได้มากถึง 1 ล้านต่อบัญชีเลยทีเดียว และในครั้งหน้าหากต้องการใช้งานเกี่ยวกับเวลามาทดลองใช้ EventBridge Scheduler กันดูนะครับ
เพื่อสร้าง Schedule ที่ทำงานเป็นประจำทุกๆ 1 นาที ตั้งแต่วันจันทร์~วันเสาร์ เวลา 7:30〜24:00
เลยลองสร้าง 3 Rules ขึ้นมาตามด้านล่างนี้
// วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 5:30〜5:59 (Thai Timezone)
cron(30-59 22 ? * SUN-FRI *)
//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 06:00〜06:59 (Thai Timezone)
cron(* 23 ? * SUN-FRI *)
//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 07:00〜23:59 (Thai Timezone)
cron(* 0-16 ? * MON-SAT *)
ใน EventBridge Scheduler สามารถลงข้อมูลได้ง่ายขึ้นเมื่อเทียบกับทางด้านบน
//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 7:30〜7:59
cron(30-59 7 ? * MON-SAT *)
//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 08:00〜23:59
cron(* 8-23 ? * MON-SAT *)
การอินพุตไปยัง target ของ EventBridge Scheduler
ความแตกต่างใหญ่ที่ไม่ได้ระบุไว้ในตารางเปรียบเทียบทางด้านบนคือวิธีการระบุอินพุตไปยัง Target
ใน EventBridge Rules มีตัวเลือกที่หลากหลายที่ใช้ในการอินพุตไปยัง Target แต่ EventBridge Scheduler จะเป็นวิธีส่งออกด้วยการอินพุต JSON Object เท่านั้น มองแวบแรกอาจจะดูเหมือนตัวเลือกจะลดลง แต่เนื่องจากในบรรดา JSON Object สามารถนำมาใช้เป็นองค์ประกอบต่อไปนี้เป็นตัวแปรได้ จึงทำให้รองรับองค์ประกอบหลักที่ใช้เป็นการอินพุตไปยังเป้าหมายในการทำงานของ Schedule ของ EventBridge Rule
- aws.scheduler.schedule-arn: ARN ของ Schedule
- aws.scheduler.scheduled-time:Schedule จะเป็นเวลาที่กำหนดเพื่อเรียกใช้ Target (เช่น 2022-03-22T18:59:43Z)
- aws.scheduler.execution-id:ID เฉพาะที่กำหนดโดย EventBridge Scheduler ในทุกครั้งที่ทำการเรียกใช้ target
- aws.scheduler.attempt-number:ตัวนับที่จำแนกจำนวนการทำงานในการเรียกใช้ในปัจจุบัน
ลองใช้งาน
มาลองตั้งค่าใช้งานผ่าน Management console กัน
บนหน้าเมนูของ EventBridge ทางด้านซ้ายมือจะมีหัวข้อ "scheduler"
เพิ่มเข้ามาแล้ว
เลือกที่ปุ่ม "Create Schedule"
เพื่อเข้าสู่หน้าจอการสร้าง Schedule
กำหนด Schedule name และ Schedule group
โดย cloudwatch metrics จะนับจำนวนการทำงานในแต่ละ Schedule group
เมื่อระบุ Flexible time windows ในหัวข้อ Schedule pattern แล้วก็จะทำงานตามกรอบเวลาที่ระบุไว้ โดยในครั้งนี้จะระบุไว้ที่ "15 นาที" ก็จะทำงาน ดังนั้นการทำงานก็จะอยู่ในกรอบตั้งแต่ 10:05 ถึง 10:20
และสามารถระบุ Timezone ได้
จากนั้นจะทำการเลือก Target โดยในครั้งนี้จะเลือกเป็น Lambda ครับ
โดยโค้ดของ Lambda จะเป็นโค้ดแบบเรียบง่ายที่จะแสดงแต่อินพุตที่ได้รับออกมา
import json
print('Loading function')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
print("value1 = " + event['schedule-arn'])
print("value2 = " + event['schedule-time'])
print("value3 = " + event['execution-id'])
print("value4 = " + event['attempt-number'])
return event['attempt-number'] # Echo back the first key value
ระบุ JSON Object ที่จะส่งผ่านไปยัง Target และฟังก์ชันต่างๆของ Lambda
สามารถเปิด/ปิด Schedule ได้เหมือนกับ EventBridge Rules
ในหัวข้อ Retry policy and dead-letter queue (DLQ) การตั้งค่าจะคล้ายกับ EventBridge Rules
ในหัวข้อ Encryption สามารถทำการเข้ารหัสโดยการใช้ คีย์เข้ารหัสของ AWS KMS โดยในครั้งนี้จะตั้งตามค่าเริ่มต้นครับ
และสุดท้ายลองตรวจสอบหน้าจอการตรวจสอบ หากไม่มีปัญหาก็จะสร้าง Schedule ขึ้นมา
Lambda จะทำงานในเวลา 10:06 หากอินพุตจากตัวแปรใน JSON Object ไม่มีปัญหาก็จะสามารถสามารถรับผ่าน Lambda ได้
เกี่ยวกับ CloudWatch Metric
จากที่ได้ตรวจสอบข้อมูลจาก EventBridge Scheduler UserGuide ณ ปัจจุบัน (เดือน พฤศจิกายน 2022) จะไม่มีรายละเอียดต่างๆที่เกี่ยวข้องกับ CloudWatch Metric ของ EventBridge Scheduler จากที่ตรวจสอบพบว่าจะมีเพียง InvocationAttemptCount เท่านั้น
โดย InvocationAttemptCount น่าจะหมายถึงจำนวนที่ได้เปิดการทำงาน Schedule และเท่าที่ได้ตรวจสอบเพิ่มเติมดู เหมือนจะมีการรวบรวมข้อมูลเฉพาะ Account และ ScheduleGroup เท่านั้น หาก UserGuide มีการอัพเดทเมื่อไหร่จะแจ้งให้ทราบครับ
อัพเดทข้อมูล: EventBridge Scheduler UserGuide มีการอัพเดทแล้วและมีเพิ่มรายละเอียดกี่ยวกับ CloudWatch Metric แล้ว Monitoring Amazon EventBridge Scheduler with Amazon CloudWatch - EventBridge Scheduler
สรุป
EventBridge Scheduler ฟังก์ชั่นใหม่ที่เราสามารถระบุ Time zoneและใช้งาน Schedule ได้! หากท่านใดสนใจมาลองใช้กันนะครับ